package cn.hinglo.permission.service;

import cn.hinglo.common.entity.Result;
import cn.hinglo.common.utils.ResultUtils;
import cn.hinglo.common.utils.SysCommonKit;
import cn.hinglo.permission.bean.model.User;
import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.SecureUtil;
import com.jfinal.kit.StrKit;
import com.jfinal.plugin.activerecord.Db;
import com.jfinal.plugin.activerecord.Record;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Map;


/**
 * @author HingLo
 * @createTime: 2018/11/15 15:12
 * @description: 登录先关的服务层
 */
@Service
public class LoginService {

    /**
     * 登录账号
     *
     * @param username 用户名，即唯一的员工编号
     * @param password 员工的唯一密码
     * @return 是否登录成功
     */
    public User loginMethodService(String username, String password) {
        if (StrKit.notBlank(username, password)) {
            String sql = Db.getSql("user.Login-login");
            List<User> list = User.DAO.find(sql, username, SecureUtil.md5(password));
            return list.isEmpty() ? null : list.get(0);
        }
        return null;
    }

    /**
     * 通过指定的用户名来查询全部的权限
     *
     * @param id 员工唯一id
     * @return 权限的集合
     */
    public List<Map<String, Object>> findPermissionService(Integer id) {
        String sql = Db.getSql("user.Login-permission");
        return SysCommonKit.recordToMapKit(Db.find(sql, id));
    }

    /**
     * @param id 用户的唯一Id
     * @return 返回该用户递归好的全部菜单权限
     */
    public List<Map<String, Object>> findMenuService(Integer id) {
        String sql = Db.getSql("user.Login-menu");
        List<Record> list = Db.find(sql, id);
        return SysCommonKit.recordToMapKit(SysCommonKit.createTreeMenuKit(list));
    }

    /***
     * 查询系统中可以的服务信息
     *
     * @return 返回结果
     */
    public List<Map<String, Object>> listService() {
        String sql = Db.getSql("user.List-service");
        return SysCommonKit.recordToMapKit(Db.find(sql));
    }

    /***
     * 修改密码
     *
     * @param userId 用户ID
     * @param newPassword 新密码
     * @return 返回修改结果
     */
    public Result updatePasswd(String userId, String password, String newPassword) {

        if (!StrKit.notBlank(userId, password, newPassword)) {
            return ResultUtils.error("信息校未通过,请稍后重试");
        }

        User user = User.DAO.findById(userId);
        if (user == null) {
            return ResultUtils.error("用户不存在");
        }
        if (StrUtil.equals(user.getPassword(), SecureUtil.md5(password))) {
            user.setPassword(SecureUtil.md5(newPassword));
            return user.update() ? ResultUtils.success() : ResultUtils.error("密码修改失败");
        }
        return ResultUtils.error("旧密码不正确,请稍后重试");
    }
}
